package com.jl15988.chainlog.service;

import com.jl15988.chainlog.model.ChainApiLog;
import com.jl15988.chainlog.model.ChainMethodLog;
import com.jl15988.chainlog.model.ChainTraceTree;

import java.util.List;

/**
 * 链式跟踪服务接口
 */
public interface ChainTraceService {

    /**
     * 保存API日志
     */
    void saveApiLog(ChainApiLog apiLog);

    /**
     * 保存方法日志
     */
    void saveMethodLog(ChainMethodLog methodLog);

    /**
     * 根据API日志ID获取完整的调用链
     */
    ChainTraceTree getTraceTree(String apiLogId);

    /**
     * 获取最近的API调用记录
     */
    List<ChainApiLog> getRecentApiLogs(int limit);

    /**
     * 获取最近的所有调用链（包括API和独立方法调用链）
     */
    List<Object> getRecentChains(int limit);

    /**
     * 根据条件搜索API日志
     */
    List<ChainApiLog> searchApiLogs(String url, String method, String module,
                                    Long startTime, Long endTime, int page, int size);

    /**
     * 清理过期数据
     */
    void cleanExpiredData(long expireTime);
}